/**
 * 
 */
package facade;

import java.util.ArrayList;
import factory.Factory;
import factory.FactoryJDBC;
import metier.*;

/**
 * @author
 * 
 */
public class FacadeProgramme {

    private Factory factory;
    private Service service = null;
    private Matiere matiere = null;
    private See see = null;
    private TypeEnseignement typeEnseignement = null;
    private TypeHeure typeheure = null;

    /**
     * @return the service
     */
    public Service getService() {
        return service;
    }

    public Matiere getMatiere() {
        return matiere;
    }

    public FacadeProgramme() {
        factory = new FactoryJDBC();
    }

    /**
     * @param idService
     * @param see
     * @param enseignant
     * @param typeheure
     * @param groupe
     */
    public void creerService(See see, Enseignant enseignant,
            TypeHeure typeheure, Groupe groupe) {
        service = factory.creerService(see, enseignant, typeheure, groupe);
    }

    public void creerTypeHeure(String nom) {
        typeheure = factory.creerTypeHeure(nom);
    }

    public void creerMatiere(UE ue, String nom, String description, int coefficient) {
        matiere = factory.creerMatiere(ue, nom, description, coefficient);
    }

    /**
     * @return Liste des UE
     */
    public ArrayList<UE> recupererListeUE() {
        return null;
    }

    public ArrayList<ElementListe> creerListeSee() throws ExceptionMetier {
        return factory.creerListeSee();
    }

    public ArrayList<ElementListe> creerListeSeeSemestre(int idSemestre) throws ExceptionMetier {
        return factory.creerListeSeeSemestre(idSemestre);
    }

    public ArrayList<ElementListe> creerListeTypeEnseignement()
            throws ExceptionMetier {
        return factory.creerListeTypeEnseignement();
    }

    public TypeEnseignement creerTypeEnseignement(String nom,
            int nombreHeuresEq) {
        return factory.creerTypeEnseignement(nom, nombreHeuresEq);
    }

    public void creerSee(Matiere matiere, TypeEnseignement tpe,
            int nombreHeures) {
        see = factory.creerSee(matiere, tpe, nombreHeures);
    }

    /**
     * @return la liste des salles
     */
    public ArrayList<ElementListe> creerListeSalle() {
        return factory.creerListeSalle();
    }

    /**
     * @return la liste des services
     */
    public ArrayList<ElementListe> creerListeService() {
        return factory.creerListeService();
    }

    public ArrayList<ElementListe> creerListeService(int see) throws ExceptionMetier {
        return factory.creerListeService(see);
    }

    public ArrayList<ElementListe> creerListeServiceMatiere(int matiere) throws ExceptionMetier {
        return factory.creerListeService(matiere);
    }

    public ArrayList<ElementListe> creerListeTypeHeure() throws ExceptionMetier {
        return factory.creerListeTypeHeure();
    }

    /**
     * @param idAnneeEtude
     * @param enseignantFiltre
     * @param uEFiltre
     * @return la liste des services associes a ces criteres
     */
    public ArrayList<Service> recupererListeService(int idAnneeEtude,
            int enseignantFiltre, int uEFiltre) {
        return factory.creerListeService(idAnneeEtude, enseignantFiltre,
                uEFiltre);
    }

    public ArrayList<ElementListe> creerListeMatiere() throws ExceptionMetier {
        return factory.creerListeMatiere();
    }

    public ArrayList<ElementListe> creerListeMatiereSemestre(int semestre) throws ExceptionMetier {
        return factory.creerListeMatiereSemestre(semestre);
    }

    public See getSee() {
        return see;
    }

    public void creerSee() {
        see = factory.creerSee();
    }

	public void setTypeheure(TypeHeure typeheure) {
		this.typeheure = typeheure;
	}
	public TypeHeure getTypeheure() {
		return typeheure;
	}
	
	public void ajouterService() throws ExceptionMetier {
		this.service.insert();
	}
	
	public void modifierService (Enseignant enseignant, Groupe groupe, TypeHeure typeheure, See se) throws ExceptionMetier{
		this.service.setEnseignant(enseignant);
		this.service.setGroupe(groupe);
		this.service.setTypeheure(typeheure);
		this.service.setSee(se);
		this.service.update();
	}
	
	public void supprimerService() throws ExceptionMetier {
		this.service.delete(); 
	}
	


    public void creerTypeEnseignement() {
        typeEnseignement = factory.creerTypeEnseignement();
    }

    public TypeEnseignement getTypeEnseignement() {
        return typeEnseignement;
    }

    public void ajouterSee() throws ExceptionMetier {
        if (getSee() != null) {
            getSee().insert();
        }
    }

    public void creerMatiere() {
        matiere = factory.creerMatiere();
    }

    public void modifierSee(Matiere matiere, TypeEnseignement tpe, int nbHeures) throws ExceptionMetier {
        if (getSee() != null) {
            getSee().setMatiere(matiere);
            getSee().setTypeEnseignement(tpe);
            getSee().setNombreHeures(nbHeures);
            getSee().update();
        }
    }

    public void supprimerSee() throws ExceptionMetier {
        if (getSee() != null) {
            getSee().delete();
        }
    }

}
